package com.luxsoft.sw3.cfd.ui;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import mx.gob.sat.cfd.x2.ComprobanteDocument;
import mx.gob.sat.cfd.x2.ComprobanteDocument.Comprobante;
import mx.gob.sat.cfd.x2.ComprobanteDocument.Comprobante.Receptor;

import com.luxsoft.siipap.service.ServiceLocator2;
import com.luxsoft.siipap.ventas.model.Venta;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;

/**
 * Utilerias para la impresion de comprobantes fiscales digitales
 * 
 * 
 * @author Ruben Cancino Ramos
 *
 */
public class ImpresionUtils {
	
	
	public static void mostrarFacturaElectronica(Venta venta){
		String html=generarImpresionDeFacturaDigital(null,venta);
		FacturaDigitalPanel.showInDialog(html);
	}
	
	public static String generarImpresionDeFacturaDigital(ComprobanteDocument comprobante,Venta venta){
		
		Configuration cfg=new Configuration();
		cfg.setDateFormat("dd/MM/yyyy");
		cfg.setObjectWrapper(new DefaultObjectWrapper());
		cfg.setClassForTemplateLoading(ImpresionUtils.class, "/");
		
		comprobante=ComprobanteDocument.Factory.newInstance();
		Comprobante cfd=comprobante.addNewComprobante();
		Receptor receptor=cfd.addNewReceptor();
		receptor.setNombre("RUBEN CANCINO RAMOS");
		
		Map root=new HashMap();
		root.put("receptor", receptor);
		root.put("cliente", venta.getCliente());
		root.put("telefonos", venta.getCliente().getTelefonosRow());
				
		try {
			final Template temp=cfg.getTemplate("templates/factura_digital_a.ftl");			
			StringWriter out=new StringWriter();
			temp.process(root, out);			
			return out.toString();
		} catch (Exception e) {
			throw new RuntimeException("Imposible cargar impresion de factura digital ",e);
		}
	}
	
	/**
	 * Prueba local en el EDT
	 * 
	 * @param args
	 * 
	 */
	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				com.luxsoft.siipap.swing.utils.SWExtUIManager.setup();
				Venta venta=ServiceLocator2
				.getVentasManager()
				.buscarVentaInicializada("8a8a81eb-2b870086-012b-880205e6-0032");
				mostrarFacturaElectronica(venta);
				System.exit(0);
			}

		});
	}

}
